package com.yy.rabbitmq.receiver;

import com.rabbitmq.client.Channel;
import com.yy.rabbitmq.config.MessageConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.util.Date;

@Component
public class Receiver {

//    @RabbitListener(queues = MessageConfig.SMS_EMAIL_QUEUE)
//    public void getEmailMessage(Message message, Channel channel) throws IOException {
//        String msg = new String(message.getBody());
//        System.out.println("接收到邮件消息：" + msg);
//        /* 单条消息的大小(0表示即无限制)
//         * 每次处理消息的数量
//         * 只作用于该Consumer层，不作用于Channel
//         */
//        System.out.println(new Date()+"接受时间");
//        channel.basicQos(0, 1, false);
//        //手动应答消息　　第一个参数是所确认消息的标识，第二参数是是否批量确认
//        if (msg.contains("dead")) {
//            //拒绝，丢到
//            channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
//        }else {
//            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
//        }
//
//    }

    @RabbitListener(queues = MessageConfig.SMS_PHONE_QUEUE)
    public void getPhoneMessage(Message message, Channel channel) throws IOException {
        System.out.println("接收到电话消息：" + new String(message.getBody()));
        //手动应答消息　　第一个参数是所确认消息的标识，第二参数是是否批量确认
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    }

    @RabbitListener(queues = MessageConfig.SMS_LOG_QUEUE)
    public void getLogMessage(Message message, Channel channel) throws IOException {
        System.out.println("接收到全部消息：" + new String(message.getBody()));
        //手动应答消息　　第一个参数是所确认消息的标识，第二参数是是否批量确认
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    }

    @RabbitListener(queues = MessageConfig.SMS_DEAD_QUEUE)
    public void getDeadEmailMessage(Message message, Channel channel) throws IOException {
        System.out.println("接收到死信邮件消息：" + new String(message.getBody())+new Date());
        /* 单条消息的大小(0表示即无限制)
         * 每次处理消息的数量
         * 只作用于该Consumer层，不作用于Channel
         */
        channel.basicQos(0, 1, false);
        //手动应答消息　　第一个参数是所确认消息的标识，第二参数是是否批量确认
         channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    }
}
